#!/bin/bash

# 定义颜色常量
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # No Color

# 打印带颜色的消息
function log_info {
    echo -e "${GREEN}[INFO]${NC} $1"
}

function log_warn {
    echo -e "${YELLOW}[WARN]${NC} $1"
}

function log_error {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 检查命令是否成功执行
function check_error {
    if [ $? -ne 0 ]; then
        log_error "$1"
        exit 1
    fi
}

# 显示帮助信息
function show_help {
    echo "使用方法: $0 [选项]"
    echo ""
    echo "选项:"
    echo "  -h, --help          显示帮助信息"
    echo "  -e, --env ENV       指定环境 (dev|test|prod), 默认: dev"
    echo "  --skip-build        跳过构建步骤"
    echo "  --skip-migrate      跳过数据库迁移"
    echo ""
    echo "示例:"
    echo "  $0 -e prod          生产环境部署"
    echo "  $0 --skip-migrate   部署但跳过数据库迁移"
}

# 默认参数
ENV="dev"
SKIP_BUILD=false
SKIP_MIGRATE=false

# 解析命令行参数
while [[ $# -gt 0 ]]; do
    key="$1"
    case $key in
        -h|--help)
            show_help
            exit 0
            ;;
        -e|--env)
            ENV="$2"
            shift 2
            ;;
        --skip-build)
            SKIP_BUILD=true
            shift
            ;;
        --skip-migrate)
            SKIP_MIGRATE=true
            shift
            ;;
        *)
            log_error "未知选项: $1"
            show_help
            exit 1
            ;;
    esac
done

# 检查环境
if [[ "$ENV" != "dev" && "$ENV" != "test" && "$ENV" != "prod" ]]; then
    log_error "无效的环境: $ENV. 有效值: dev, test, prod"
    exit 1
fi

log_info "开始 BookStack 部署 [环境: $ENV]"

# 设置环境配置
log_info "配置环境: $ENV"
if [ -f ".env.$ENV" ]; then
    cp ".env.$ENV" ".env"
    check_error "复制环境配置失败"
else
    log_warn "找不到环境配置文件 .env.$ENV, 使用默认配置"
fi

# 构建应用
if [ "$SKIP_BUILD" = false ]; then
    log_info "构建应用..."
    go build -o bookstack
    check_error "构建失败"
    log_info "构建成功"
else
    log_info "跳过构建步骤"
fi

# 执行数据库迁移
if [ "$SKIP_MIGRATE" = false ]; then
    log_info "执行数据库迁移..."
    ./bookstack migrate
    check_error "数据库迁移失败"
    log_info "数据库迁移成功"
else
    log_info "跳过数据库迁移"
fi

# 部署完成
log_info "BookStack 部署完成 [环境: $ENV]" 